/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.senaclem.persistencia;

import co.edu.senaclem.modelo.Aprendiz;
import co.edu.senaclem.modelo.FichaTitulacion;
import co.edu.senaclem.modelo.Personal;
import co.edu.senaclem.modelo.Seguimiento;
import static co.edu.senaclem.persistencia.Persistencia.areadb;
import static co.edu.senaclem.persistencia.Persistencia.con;
import static co.edu.senaclem.persistencia.Persistencia.conectar;
import static co.edu.senaclem.persistencia.Persistencia.desconectar;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;

/**
 *
 * @author DILOVE
 */
@Stateless
public class SeguimientoDAO implements ISeguimientoDAO {

    IFichaTitulacionDAO fichaTitulacionDAO = new FichaTitulacionDAO();

    public static ResultSet resSet = null;
    
    @Override
    public void registrar(Seguimiento seguimiento) throws Exception {
        try {
            if (conectar()) {
                String consulta = "insert into seguimiento values(null,"+seguimiento.getNumeroactaseguimiento()+",'" + seguimiento.getFechaseguimiento() + "','','','','','','"+seguimiento.getCiudadseguimiento()+"','" + seguimiento.getLugarseguimiento() + "','" + seguimiento.getHoraseguimiento() + "','','" + seguimiento.getEstadoseguimiento() + "'," + seguimiento.getFichaTitulacion().getFicha() + ")";
                System.out.println("consulta "+consulta);
                areadb = con.createStatement();
                areadb.execute(consulta);
                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public void modificar(Seguimiento seguimiento) throws Exception {
        try {
            if (conectar()) {
                String consulta = "update seguimiento set fechaseguimiento='" + seguimiento.getFechaseguimiento() + "', lugarseguimiento='" + seguimiento.getLugarseguimiento() + "', horaseguimiento='" + seguimiento.getHoraseguimiento() + "', ciudadseguimiento='"+seguimiento.getCiudadseguimiento()+"' where codigoseguimiento=" + seguimiento.getCodigoseguimiento() + "";
                System.out.println("Update de seguimiento "+consulta);
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public void eliminar(Seguimiento seguimiento) throws Exception {
        try {
            if (conectar()) {
                String consulta = "update seguimiento set estadoseguimiento='CANCELADO' where codigoseguimiento=" + seguimiento.getCodigoseguimiento() + "";
                System.out.println("consulta para cancelar "+consulta);
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public Seguimiento consultarPorNumero(Integer codigoSeguimiento) throws Exception {        
        try {
            Seguimiento miSeguimiento = null;
            if (conectar()) {
                String consulta = "Select * From seguimiento where codigoseguimiento=" + codigoSeguimiento + "";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);

                if (resSet.next()) {
                    miSeguimiento = new Seguimiento();
                    miSeguimiento.setCodigoseguimiento(resSet.getInt("codigoseguimiento"));
                    miSeguimiento.setNumeroactaseguimiento(resSet.getInt("numeroactaseguimiento"));
                    miSeguimiento.setFechaseguimiento(resSet.getString("fechaseguimiento"));
                    miSeguimiento.setFaseseguimiento(resSet.getString("faseseguimiento"));
                    miSeguimiento.setLugarseguimiento(resSet.getString("lugarseguimiento"));
                    miSeguimiento.setCiudadseguimiento(resSet.getString("ciudadseguimiento"));
                    miSeguimiento.setEstadoseguimiento(resSet.getString("estadoseguimiento"));
                    miSeguimiento.setObsseguimiento(resSet.getString("obsseguimiento"));                    
                    int ficha = resSet.getInt("fichatitulacion");
                    FichaTitulacion fichaTitulacion = fichaTitulacionDAO.consultarPorId(ficha);
                    miSeguimiento.setFichaTitulacion(fichaTitulacion);
                }
                resSet.close();
                desconectar();
            }

            return miSeguimiento;
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public List<Seguimiento> consultar() throws Exception {
        try {
            List<Seguimiento> seguimientos = new ArrayList<Seguimiento>();
            if (conectar()) {
                String consulta = "Select * From seguimiento";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);
                while (resSet.next()) {
                    Seguimiento miSeguimiento = new Seguimiento();
                    miSeguimiento.setCodigoseguimiento(resSet.getInt("codigoseguimiento"));
                    miSeguimiento.setNumeroactaseguimiento(resSet.getInt("numeroactaseguimiento"));
                    miSeguimiento.setFechaseguimiento(resSet.getString("fechaseguimiento"));                   
                    miSeguimiento.setLugarseguimiento(resSet.getString("lugarseguimiento"));
                    miSeguimiento.setCiudadseguimiento(resSet.getString("ciudadseguimiento"));
                    miSeguimiento.setEstadoseguimiento(resSet.getString("estadoseguimiento"));
                    miSeguimiento.setHoraseguimiento(resSet.getString("horaseguimiento"));                    
                    int ficha = resSet.getInt("fichatitulacion");
                    FichaTitulacion fichaTitulacion = fichaTitulacionDAO.consultarPorId(ficha);
                    miSeguimiento.setFichaTitulacion(fichaTitulacion);
                    
                    seguimientos.add(miSeguimiento);
                }

                resSet.close();
                desconectar();
            }

            return seguimientos;
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public String generarNumeroSeguimiento(int ficha) throws Exception {
        int numeroacta=0;
        try {
            if (conectar()) {
                String consulta = "select IFNULL(max(numeroactaseguimiento),0) as na from seguimiento where fichatitulacion = "+ficha+";";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);
                if (resSet.next()) {
                    String na = resSet.getString("na");                    
                    numeroacta = Integer.parseInt(na)+1;                    
                }
                resSet.close();
                desconectar();
            }

            return numeroacta+"";
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public String generarCodigoSeguimiento() throws Exception {
        int numeroacta=0;
        try {
            if (conectar()) {
                String consulta = "select IFNULL(max(codigoseguimiento),0) as ns from seguimiento;";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);
                if (resSet.next()) {
                    String na = resSet.getString("ns");                    
                    numeroacta = Integer.parseInt(na)+1;                    
                }
                resSet.close();
                desconectar();
            }

            return numeroacta+"";
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public List<Seguimiento> consultarPorLider(Integer documentoinstructor) throws Exception {
        try {
            List<Seguimiento> seguimientos = new ArrayList<Seguimiento>();
            if (conectar()) {
                String consulta = "select * from seguimiento where (seguimiento.estadoseguimiento='PROGRAMADO' or seguimiento.estadoseguimiento='ALISTADO') and seguimiento.fichatitulacion IN (select fichatitulacion from lideresficha where documentoinstructor="+documentoinstructor+");";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);
                while (resSet.next()) {
                    Seguimiento miSeguimiento = new Seguimiento();
                    miSeguimiento.setCodigoseguimiento(resSet.getInt("codigoseguimiento"));
                    miSeguimiento.setNumeroactaseguimiento(resSet.getInt("numeroactaseguimiento"));
                    miSeguimiento.setFechaseguimiento(resSet.getString("fechaseguimiento"));                   
                    miSeguimiento.setLugarseguimiento(resSet.getString("lugarseguimiento"));
                    miSeguimiento.setCiudadseguimiento(resSet.getString("ciudadseguimiento"));
                    miSeguimiento.setEstadoseguimiento(resSet.getString("estadoseguimiento"));
                    miSeguimiento.setHoraseguimiento(resSet.getString("horaseguimiento"));
                    miSeguimiento.setFaseseguimiento(resSet.getString("faseseguimiento"));
                    miSeguimiento.setCompetenciasseguimiento(resSet.getString("competenciasseguimiento"));
                    miSeguimiento.setObsseguimiento(resSet.getString("obsseguimiento"));
                    int ficha = resSet.getInt("fichatitulacion");
                    FichaTitulacion fichaTitulacion = fichaTitulacionDAO.consultarPorId(ficha);
                    miSeguimiento.setFichaTitulacion(fichaTitulacion);
                    
                    seguimientos.add(miSeguimiento);
                }

                resSet.close();
                desconectar();
            }

            return seguimientos;
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public void alistar(Seguimiento seguimiento) throws Exception {
        try {
            if (conectar()) {
                String consulta = "update seguimiento set estadoseguimiento='"+seguimiento.getEstadoseguimiento()+"', faseseguimiento='" + seguimiento.getFaseseguimiento()+ "', competenciasseguimiento='" + seguimiento.getCompetenciasseguimiento()+ "', obsseguimiento='" + seguimiento.getObsseguimiento()+ "' where codigoseguimiento=" + seguimiento.getCodigoseguimiento() + "";
                System.out.println("Update de seguimiento "+consulta);
                areadb = con.createStatement();
                areadb.execute(consulta);

                desconectar();
            }
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public List<Aprendiz> consultarAprendicesPorFicha(Integer ficha) throws Exception {
        try {
            List<Aprendiz> aprendices = new ArrayList<Aprendiz>();
            if (conectar()) {
                String consulta = "select * from personal,aprendiz where fichatitulacion="+ficha+" and personal.documentopersonal=aprendiz.documentoaprendiz";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);
                while (resSet.next()) {
                    Aprendiz miAprendiz = new Aprendiz();
                    Personal miPersonal = new Personal();
                    miPersonal.setDocumento(resSet.getLong("documentopersonal"));
                    miPersonal.setNombre(resSet.getString("nombrepersonal"));
                    miPersonal.setApellido(resSet.getString("apellidopersonal"));
                    miPersonal.setCorreo(resSet.getString("correopersonal"));
                    miPersonal.setTelefono(resSet.getString("telefonopersonal"));
                    miAprendiz.setDocumento(miPersonal);
                    aprendices.add(miAprendiz);
                }

                resSet.close();
                desconectar();
            }

            return aprendices;
        } catch (RuntimeException e) {
            throw e;
        }
    }

    @Override
    public List<Seguimiento> consultarAlistadosPorLider(Integer documentoinstructor) throws Exception {        
        try {
            List<Seguimiento> seguimientos = new ArrayList<Seguimiento>();
            if (conectar()) {
                String consulta = "select * from seguimiento where seguimiento.estadoseguimiento='ALISTADO' and seguimiento.fichatitulacion IN (select fichatitulacion from lideresficha where documentoinstructor="+documentoinstructor+");";
                areadb = con.createStatement();
                resSet = areadb.executeQuery(consulta);
                while (resSet.next()) {
                    Seguimiento miSeguimiento = new Seguimiento();
                    miSeguimiento.setCodigoseguimiento(resSet.getInt("codigoseguimiento"));
                    miSeguimiento.setNumeroactaseguimiento(resSet.getInt("numeroactaseguimiento"));
                    miSeguimiento.setFechaseguimiento(resSet.getString("fechaseguimiento"));                   
                    miSeguimiento.setLugarseguimiento(resSet.getString("lugarseguimiento"));
                    miSeguimiento.setCiudadseguimiento(resSet.getString("ciudadseguimiento"));
                    miSeguimiento.setEstadoseguimiento(resSet.getString("estadoseguimiento"));
                    miSeguimiento.setHoraseguimiento(resSet.getString("horaseguimiento"));
                    miSeguimiento.setFaseseguimiento(resSet.getString("faseseguimiento"));
                    miSeguimiento.setCompetenciasseguimiento(resSet.getString("competenciasseguimiento"));
                    miSeguimiento.setObsseguimiento(resSet.getString("obsseguimiento"));
                    int ficha = resSet.getInt("fichatitulacion");
                    FichaTitulacion fichaTitulacion = fichaTitulacionDAO.consultarPorId(ficha);
                    miSeguimiento.setFichaTitulacion(fichaTitulacion);
                    
                    seguimientos.add(miSeguimiento);
                }

                resSet.close();
                desconectar();
            }

            return seguimientos;
        } catch (RuntimeException e) {
            throw e;
        }
    }

}
